package com.charmjin.as3.cookie 
{
	import flash.net.SharedObject;
	
	/**
	 * ...
	 * @author charmjin
	 */
	public class Cookie 
	{
		static public var cookie:SharedObject = SharedObject.getLocal("charmjin", "/");
		
		public function Cookie() { }
		
		/**
		 * 쿠키 저장
		 * @param	name
		 * @param	data
		 */
		static public function setCookie(name:String, data:String):void {
			if (name != "" && data != "") {
				if (cookieNameCheck(name)) {
					try{
						cookie.data[name][0] = data;
						//trace("Cookie reWrite");
					}catch(e:Error){
						cookie.data[name] = new Array();
						cookie.data[name][0] = data;
						//trace("Cookie Write");
					}
				}else {
					throw new Error("쿠키 이름은 특수문자 @ - _ . * + / 만 허용 된다.");
				}
			}
		}
		
		/**
		 * 쿠키 읽기
		 * @param	name
		 * @return
		 */
		static public function getCookie(name:String):String {
			if (name != "") {
				if (cookieNameCheck(name)) {
					try{
						return cookie.data[name][0];
					}catch(e:Error){
						//trace("Cookie empty");
					}
				}else {
					throw new Error("쿠키 이름은 특수문자 @ - _ . * + / 만 허용 된다.");
				}
			}
			return "none";
		}
		
		/**
		 * 쿠키 지우기
		 * @param	name
		 */
		static public function clearCookie(name:String):void {
			if (name != "") {
				if (cookieNameCheck(name)) {
					cookie.clear();
					cookie.flush();
					//trace("Cookie clear");
				}else {
					throw new Error("쿠키 이름은 특수문자 @ - _ . * + / 만 허용 된다.");
				}
			}
		}
		
		/**
		 * 쿠키 이름 체크.
		 * 쿠키 이름은 특수문자 @ - _ . * + / 만 허용 된다.
		 * @param	name
		 * @return
		 */
		static private function cookieNameCheck(name:String):Boolean {
			var check:Boolean = true;
			var nameArr:Array = name.split("");
			for each(var i:String in nameArr) {
				var temp:String = escape(i);
				if (temp.substr(0,1) == "%") {
					if (temp.substr( -2) != "2D" && temp.substr( -2) != "5F") {
						check = false;
						break;
					}
				}
			}
			return check;
		}
	}
}